package com.ruoyi.system.controller;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.HomeLocation;
import com.ruoyi.system.service.IHomeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 回家路径规划控制器
 * 处理家位置的增删改查、路径规划请求
 */
@RestController
@RequestMapping("/system/home")
public class HomeController extends BaseController {

    @Autowired
    private IHomeService homeService;

    /**
     * 1. 保存/更新用户的家位置（支持新增和修改）
     * 请求方式：POST
     * 前端传递家的地址、经纬度，自动关联当前登录用户
     */
    @PostMapping("/saveLocation")
    public AjaxResult saveOrUpdateHomeLocation(@RequestBody HomeLocation homeLocation) {
        // 获取当前登录用户信息（若依框架工具类）
        LoginUser loginUser = SecurityUtils.getLoginUser();
        Long userId = loginUser.getUserId();
        String userName = loginUser.getUsername();

        // 给家位置对象设置用户ID、创建人、更新人（审计字段）
        homeLocation.setUserId(userId);
        homeLocation.setCreateBy(userName);
        homeLocation.setUpdateBy(userName);

        // 调用Service的【saveOrUpdateHomeLocation】方法（关键：方法名必须与Service接口一致）
        int result = homeService.saveOrUpdateHomeLocation(homeLocation);
        return result > 0 ? AjaxResult.success("家位置保存成功") : AjaxResult.error("家位置保存失败");
    }

    /**
     * 2. 获取当前登录用户的家位置
     * 请求方式：GET
     * 自动根据当前用户ID查询，无需前端传参
     */
    @GetMapping("/getLocation")
    public AjaxResult getHomeLocation() {
        // 获取当前登录用户ID
        Long userId = SecurityUtils.getLoginUser().getUserId();
        // 调用Service查询
        HomeLocation homeLocation = homeService.getHomeLocationByUserId(userId);
        if (homeLocation == null) {
            return AjaxResult.warn("您尚未设置家的位置，请先保存");
        }
        return AjaxResult.success(homeLocation);
    }

    /**
     * 3. 规划从当前位置到家的路径
     * 请求方式：GET
     * 前端传递当前位置的经纬度，后端自动关联用户的家位置
     */
    @GetMapping("/planRoute")
    public AjaxResult planHomeRoute(String startLat, String startLng) {
        // 1. 校验前端传递的当前位置经纬度是否为空
        if (startLat == null || startLat.isEmpty() || startLng == null || startLng.isEmpty()) {
            return AjaxResult.error("请先获取当前位置的经纬度");
        }

        // 2. 获取当前用户的家位置
        Long userId = SecurityUtils.getLoginUser().getUserId();
        HomeLocation homeLocation = homeService.getHomeLocationByUserId(userId);
        if (homeLocation == null) {
            return AjaxResult.error("请先设置家的位置，再进行路径规划");
        }

        // 3. 调用Service计算路径（传递当前位置、家位置的经纬度）
        Map<String, Object> routeResult = homeService.calculateRoute(
                startLat,        // 起点纬度（当前位置）
                startLng,        // 起点经度（当前位置）
                homeLocation.getLatitude(),  // 终点纬度（家）
                homeLocation.getLongitude()  // 终点经度（家）
        );

        // 4. 根据Service返回结果封装响应
        boolean isSuccess = (boolean) routeResult.get("success");
        if (isSuccess) {
            return AjaxResult.success("路径规划成功", routeResult.get("data"));
        } else {
            return AjaxResult.error((String) routeResult.get("message"));
        }
    }
    @GetMapping("/regeo")
    public AjaxResult regeo(String lat, String lng) {
        if (lat == null || lat.isEmpty() || lng == null || lng.isEmpty()) {
            return AjaxResult.error("请传入经纬度");
        }
        Map<String, Object> regeoResult = homeService.regeo(lat, lng);
        boolean isSuccess = (boolean) regeoResult.get("success");
        if (isSuccess) {
            return AjaxResult.success("逆地理成功", regeoResult.get("data"));
        } else {
            return AjaxResult.error((String) regeoResult.get("message"));
        }
    }

}